feat(api): type request params across admin API modules

Replace data: object with precise parameter types derived from call sites,
using type inference (Omit/union) over bulk interface declarations where
possible. Covers accounts, api-keys, usage, system, auth, dashboard,
settings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
zyycn
2026-08-02 00:08:52 +08:00
co-authored by Claude Fable 5
parent 63d276767e
commit 3c4ac99ae4
7 changed files with 130 additions and 31 deletions
+51 -13
View File
@@ -171,7 +171,45 @@ export interface AccountOAuthStartResponse {
expiresAt: string
}
export function getAccounts(data: object) {
// 请求参数类型:仅定义 API 边界的形状,调用方不依赖显式声明。
interface AccountListParams {
page: number
pageSize: number
search?: string
provider?: string
status?: string
sortBy?: string
sortDirection?: string
}
interface AccountIdParam {
accountId: string
}
interface AccountProviderIdParam {
provider: string
accountId: string
}
interface AccountDeleteParams {
provider: string
accountIds: string[]
}
interface AccountImportParam {
provider: string
data: unknown
}
interface AccountOAuthStartParam {
provider: string
name: string
accountId?: string
}
interface AccountOAuthCompleteParam { flowId: string, callbackUrl: string }
export function getAccounts(data: AccountListParams) {
return request<AccountListResponse>({
url: '/api/admin/accounts',
method: 'GET',
@@ -179,7 +217,7 @@ export function getAccounts(data: object) {
})
}
export function exportAccounts(data: object) {
export function exportAccounts(data: AccountListParams) {
return request<unknown>({
url: '/api/admin/accounts/export',
method: 'GET',
@@ -187,7 +225,7 @@ export function exportAccounts(data: object) {
})
}
export function refreshAccount(data: object) {
export function refreshAccount(data: AccountIdParam) {
return request<AccountRefreshResponse>({
url: '/api/admin/accounts/refresh',
method: 'POST',
@@ -195,7 +233,7 @@ export function refreshAccount(data: object) {
})
}
export function getAccountQuota(data: object) {
export function getAccountQuota(data: AccountIdParam) {
return request<AccountQuotaResponse>({
url: '/api/admin/accounts/quota',
method: 'GET',
@@ -203,7 +241,7 @@ export function getAccountQuota(data: object) {
})
}
export function refreshAccountQuota(data: object) {
export function refreshAccountQuota(data: AccountIdParam) {
return request<AccountQuotaResponse>({
url: '/api/admin/accounts/quota/refresh',
method: 'POST',
@@ -211,7 +249,7 @@ export function refreshAccountQuota(data: object) {
})
}
export function getAccountModels(data: object) {
export function getAccountModels(data: AccountIdParam) {
return request<AccountModelsResponse>({
url: '/api/admin/accounts/models',
method: 'GET',
@@ -219,7 +257,7 @@ export function getAccountModels(data: object) {
})
}
export function refreshAccountModels(data: object) {
export function refreshAccountModels(data: AccountIdParam) {
return request<AccountModelsResponse>({
url: '/api/admin/accounts/models/refresh',
method: 'POST',
@@ -227,7 +265,7 @@ export function refreshAccountModels(data: object) {
})
}
export function importAccounts(data: object) {
export function importAccounts(data: AccountImportParam) {
return request<AccountImportResponse>({
url: '/api/admin/accounts/import',
method: 'POST',
@@ -235,7 +273,7 @@ export function importAccounts(data: object) {
})
}
export function enableAccount(data: object) {
export function enableAccount(data: AccountProviderIdParam) {
return request<AccountMutationResponse>({
url: '/api/admin/accounts/enable',
method: 'POST',
@@ -243,7 +281,7 @@ export function enableAccount(data: object) {
})
}
export function disableAccount(data: object) {
export function disableAccount(data: AccountProviderIdParam) {
return request<AccountMutationResponse>({
url: '/api/admin/accounts/disable',
method: 'POST',
@@ -251,7 +289,7 @@ export function disableAccount(data: object) {
})
}
export function deleteAccounts(data: object) {
export function deleteAccounts(data: AccountDeleteParams) {
return request<AccountDeletionResponse>({
url: '/api/admin/accounts/delete',
method: 'POST',
@@ -259,7 +297,7 @@ export function deleteAccounts(data: object) {
})
}
export function startAccountOAuth(data: object) {
export function startAccountOAuth(data: AccountOAuthStartParam) {
return request<AccountOAuthStartResponse>({
url: '/api/admin/accounts/oauth/start',
method: 'POST',
@@ -267,7 +305,7 @@ export function startAccountOAuth(data: object) {
})
}
export function completeAccountOAuth(data: object) {
export function completeAccountOAuth(data: AccountOAuthCompleteParam) {
return request<AccountMutationResponse>({
url: '/api/admin/accounts/oauth/complete',
method: 'POST',
+27 -6
View File
@@ -35,7 +35,28 @@ export interface ApiKeyMutationResponse {
id: string
}
export function getApiKeys(data: object) {
// 请求参数类型:仅定义 API 边界的形状,调用方不依赖显式声明。
interface ApiKeyListParams {
cursor?: string
limit: number
search?: string
sortBy?: string
sortDirection?: string
}
interface ApiKeyCreateParam {
name: string
label?: string
providerKind: string
maxConcurrency: number
requestsPerMinute: number
}
interface ApiKeyIdParam {
id: string
}
export function getApiKeys(data: ApiKeyListParams) {
return request<ApiKeyListResponse>({
url: '/api/admin/client-keys',
method: 'GET',
@@ -43,7 +64,7 @@ export function getApiKeys(data: object) {
})
}
export function createApiKey(data: object) {
export function createApiKey(data: ApiKeyCreateParam) {
return request<ApiKeyCreateResponse>({
url: '/api/admin/client-keys/create',
method: 'POST',
@@ -51,7 +72,7 @@ export function createApiKey(data: object) {
})
}
export function revealApiKey(data: object) {
export function revealApiKey(data: ApiKeyIdParam) {
return request<ApiKeyRevealResponse>({
url: '/api/admin/client-keys/reveal',
method: 'GET',
@@ -59,7 +80,7 @@ export function revealApiKey(data: object) {
})
}
export function deleteApiKey(data: object) {
export function deleteApiKey(data: ApiKeyIdParam) {
return request<ApiKeyMutationResponse>({
url: '/api/admin/client-keys/delete',
method: 'POST',
@@ -67,7 +88,7 @@ export function deleteApiKey(data: object) {
})
}
export function disableApiKey(data: object) {
export function disableApiKey(data: ApiKeyIdParam) {
return request<ApiKeyMutationResponse>({
url: '/api/admin/client-keys/disable',
method: 'POST',
@@ -75,7 +96,7 @@ export function disableApiKey(data: object) {
})
}
export function enableApiKey(data: object) {
export function enableApiKey(data: ApiKeyIdParam) {
return request<ApiKeyMutationResponse>({
url: '/api/admin/client-keys/enable',
method: 'POST',
+6 -1
View File
@@ -12,7 +12,12 @@ export interface LogoutResponse {
message: string
}
export function login(data: object) {
interface LoginParam {
username: string
password: string
}
export function login(data: LoginParam) {
return request<LoginResponse>({
url: '/api/admin/auth/login',
method: 'POST',
+6 -2
View File
@@ -170,7 +170,11 @@ export interface DashboardSummaryResponse {
rotationStrategy: string
}
export function getDashboardSummary(data: object) {
interface DashboardQuery {
kind: string
}
export function getDashboardSummary(data: DashboardQuery) {
return request<DashboardSummaryResponse>({
url: '/api/admin/dashboard/summary',
method: 'GET',
@@ -178,7 +182,7 @@ export function getDashboardSummary(data: object) {
})
}
export function getDashboardTrend(data: object) {
export function getDashboardTrend(data: DashboardQuery) {
return request<DashboardTrendResponse>({
url: '/api/admin/dashboard/trend',
method: 'GET',
+3 -1
View File
@@ -34,7 +34,9 @@ export function getSettings() {
})
}
export function updateSettings(data: object) {
type UpdateSettingsParam = Omit<RuntimeSettings, 'updatedAt'>
export function updateSettings(data: UpdateSettingsParam) {
return request<RuntimeSettings>({
url: '/api/admin/settings/update',
method: 'POST',
+10 -2
View File
@@ -50,7 +50,15 @@ export function getSystemVersion(timeout = 0) {
})
}
export function getSystemUpdateDetail(data: object) {
interface SystemUpdateDetailQuery {
refresh?: boolean
}
interface SystemUpdateTarget {
targetVersion?: string
}
export function getSystemUpdateDetail(data: SystemUpdateDetailQuery) {
return request<SystemUpdateDetail>({
url: '/api/admin/system/update/detail',
method: 'GET',
@@ -58,7 +66,7 @@ export function getSystemUpdateDetail(data: object) {
})
}
export function performSystemUpdate(data: object) {
export function performSystemUpdate(data: SystemUpdateTarget) {
return request<SystemUpdateAccepted>({
url: '/api/admin/system/update',
method: 'POST',
+27 -6
View File
@@ -331,7 +331,28 @@ export interface UsageDiagnosticsResponse {
items: UsageDiagnosticItem[]
}
export function getUsageRecords(data: object) {
// 请求参数类型:仅定义 API 边界的形状,调用方不依赖显式声明。
interface UsageRangeQuery {
startTime: string
endTime: string
provider?: string
model?: string
statusCode?: number
search?: string
}
type UsagePagedQuery = UsageRangeQuery & {
page: number
pageSize: number
}
interface UsageDetailQuery {
id: string
}
type UsageDiagnosticsQuery = UsageRangeQuery & { dimension: string }
export function getUsageRecords(data: UsagePagedQuery) {
return request<UsageRecordsResponse>({
url: '/api/admin/usage/records',
method: 'GET',
@@ -339,7 +360,7 @@ export function getUsageRecords(data: object) {
})
}
export function getOpsErrors(data: object) {
export function getOpsErrors(data: UsagePagedQuery) {
return request<OpsErrorsResponse>({
url: '/api/admin/operations/errors',
method: 'GET',
@@ -347,7 +368,7 @@ export function getOpsErrors(data: object) {
})
}
export function getUsageRecordDetail(data: object) {
export function getUsageRecordDetail(data: UsageDetailQuery) {
return request<UsageRecordDetail>({
url: '/api/admin/usage/records/detail',
method: 'GET',
@@ -355,7 +376,7 @@ export function getUsageRecordDetail(data: object) {
})
}
export function getUsageRecordSummary(data: object) {
export function getUsageRecordSummary(data: UsageRangeQuery) {
return request<UsageSummaryResponse>({
url: '/api/admin/usage/records/summary',
method: 'GET',
@@ -363,7 +384,7 @@ export function getUsageRecordSummary(data: object) {
})
}
export function getUsageRecordInsightsOverview(data: object) {
export function getUsageRecordInsightsOverview(data: UsageRangeQuery) {
return request<UsageInsightsOverviewResponse>({
url: '/api/admin/usage/insights/overview',
method: 'GET',
@@ -371,7 +392,7 @@ export function getUsageRecordInsightsOverview(data: object) {
})
}
export function getUsageRecordInsightsDiagnostics(data: object) {
export function getUsageRecordInsightsDiagnostics(data: UsageDiagnosticsQuery) {
return request<UsageDiagnosticsResponse>({
url: '/api/admin/usage/insights/diagnostics',
method: 'GET',