Files
mai-bot/dashboard/src/lib/person-api.ts

139 lines
3.4 KiB
TypeScript

/**
* 人物信息管理 API
*/
import { fetchWithAuth, getAuthHeaders } from '@/lib/fetch-with-auth'
import type {
PersonListResponse,
PersonDetailResponse,
PersonUpdateRequest,
PersonUpdateResponse,
PersonDeleteResponse,
PersonStatsResponse,
} from '@/types/person'
const API_BASE = '/api/webui/person'
/**
* 获取人物信息列表
*/
export async function getPersonList(params: {
page?: number
page_size?: number
search?: string
is_known?: boolean
platform?: string
}): Promise<PersonListResponse> {
const queryParams = new URLSearchParams()
if (params.page) queryParams.append('page', params.page.toString())
if (params.page_size) queryParams.append('page_size', params.page_size.toString())
if (params.search) queryParams.append('search', params.search)
if (params.is_known !== undefined) queryParams.append('is_known', params.is_known.toString())
if (params.platform) queryParams.append('platform', params.platform)
const response = await fetchWithAuth(`${API_BASE}/list?${queryParams}`, {
headers: getAuthHeaders(),
})
if (!response.ok) {
const error = await response.json()
throw new Error(error.detail || '获取人物列表失败')
}
return response.json()
}
/**
* 获取人物详细信息
*/
export async function getPersonDetail(personId: string): Promise<PersonDetailResponse> {
const response = await fetchWithAuth(`${API_BASE}/${personId}`, {
headers: getAuthHeaders(),
})
if (!response.ok) {
const error = await response.json()
throw new Error(error.detail || '获取人物详情失败')
}
return response.json()
}
/**
* 更新人物信息(增量更新)
*/
export async function updatePerson(
personId: string,
data: PersonUpdateRequest
): Promise<PersonUpdateResponse> {
const response = await fetchWithAuth(`${API_BASE}/${personId}`, {
method: 'PATCH',
headers: getAuthHeaders(),
body: JSON.stringify(data),
})
if (!response.ok) {
const error = await response.json()
throw new Error(error.detail || '更新人物信息失败')
}
return response.json()
}
/**
* 删除人物信息
*/
export async function deletePerson(personId: string): Promise<PersonDeleteResponse> {
const response = await fetchWithAuth(`${API_BASE}/${personId}`, {
method: 'DELETE',
headers: getAuthHeaders(),
})
if (!response.ok) {
const error = await response.json()
throw new Error(error.detail || '删除人物信息失败')
}
return response.json()
}
/**
* 获取人物统计数据
*/
export async function getPersonStats(): Promise<PersonStatsResponse> {
const response = await fetchWithAuth(`${API_BASE}/stats/summary`, {
headers: getAuthHeaders(),
})
if (!response.ok) {
const error = await response.json()
throw new Error(error.detail || '获取统计数据失败')
}
return response.json()
}
/**
* 批量删除人物信息
*/
export async function batchDeletePersons(personIds: string[]): Promise<{
success: boolean
message: string
deleted_count: number
failed_count: number
failed_ids: string[]
}> {
const response = await fetchWithAuth(`${API_BASE}/batch/delete`, {
method: 'POST',
headers: getAuthHeaders(),
body: JSON.stringify({ person_ids: personIds }),
})
if (!response.ok) {
const error = await response.json()
throw new Error(error.detail || '批量删除失败')
}
return response.json()
}