import { api } from "@/lib/api-client" import type { Endpoint, CreateEndpointRequest, UpdateEndpointRequest, GetEndpointsRequest, GetEndpointsResponse, BatchDeleteEndpointsRequest, BatchDeleteEndpointsResponse } from "@/types/endpoint.types" export class EndpointService { /** * 获取单个 Endpoint 详情 * @param id - Endpoint ID * @returns Promise */ static async getEndpointById(id: number): Promise { const response = await api.get(`/endpoints/${id}/`) return response.data } /** * 获取 Endpoint 列表 * @param params - 查询参数 * @returns Promise */ static async getEndpoints(params: GetEndpointsRequest): Promise { // api-client.ts 会自动将 params 对象的驼峰转换为下划线 const response = await api.get('/endpoints/', { params }) return response.data } /** * 根据目标ID获取 Endpoint 列表(专用路由) * @param targetId - 目标ID * @param params - 其他查询参数 * @returns Promise */ static async getEndpointsByTargetId(targetId: number, params: GetEndpointsRequest): Promise { // api-client.ts 会自动将 params 对象的驼峰转换为下划线 const response = await api.get(`/targets/${targetId}/endpoints/`, { params }) return response.data } /** * 根据扫描ID获取 Endpoint 列表(历史快照) * @param scanId - 扫描任务 ID * @param params - 分页等查询参数 */ static async getEndpointsByScanId( scanId: number, params: GetEndpointsRequest, ): Promise { const response = await api.get(`/scans/${scanId}/endpoints/`, { params, }) return response.data } /** * 批量创建 Endpoint * @param data - 创建请求对象 * @param data.endpoints - Endpoint 数据数组 * @returns Promise */ static async createEndpoints(data: { endpoints: Array }): Promise { // api-client.ts 会自动将请求体的驼峰转换为下划线 const response = await api.post('/endpoints/create/', data) return response.data } /** * 删除 Endpoint * @param id - Endpoint ID * @returns Promise */ static async deleteEndpoint(id: number): Promise { await api.delete(`/endpoints/${id}/`) } /** * 批量删除 Endpoint * @param data - 批量删除请求对象 * @param data.endpointIds - Endpoint ID 列表 * @returns Promise */ static async batchDeleteEndpoints(data: BatchDeleteEndpointsRequest): Promise { // api-client.ts 会自动将请求体的驼峰转换为下划线 const response = await api.post('/endpoints/batch-delete/', data) return response.data } /** 按目标导出所有端点 URL(文本文件,一行一个) */ static async exportEndpointsByTargetId(targetId: number): Promise { const response = await api.get(`/targets/${targetId}/endpoints/export/`, { responseType: 'blob', }) return response.data } /** 按扫描任务导出所有端点 URL(文本文件,一行一个) */ static async exportEndpointsByScanId(scanId: number): Promise { const response = await api.get(`/scans/${scanId}/endpoints/export/`, { responseType: 'blob', }) return response.data } }