ForcePilot/web/src/apis/external-systems/recycle_bin_api.js

69 lines
3.0 KiB
JavaScript
Raw Normal View History

/**
* 23-回收站 API4 端点
* 路径前缀/trash
*
* 对齐后端 Routerbackend/server/routers/external_systems/trash_router.py
* 关键对齐点
* - 后端所有端点使用 get_admin_user管理员鉴权高危操作前端全部用 apiAdmin*
* - list 端点带 params改用 buildQueryString 拼接避免把 params 误传为 fetch options
*
* 后端 GET /trash 有两种查询模式 trash_service.list_trash
* - 摘要模式不传 resource_type返回 {items: [], total: 0, by_type: {11种类型计数}}
* 用于展示各资源类型的待恢复数量
* - 明细模式 resource_type返回 {items: [...], total: N, by_type: {该类型: N}}
* items 中每项为 TrashItemOutput days_in_trash 字段
*
* 后端支持的资源类型11 对齐 _RESOURCE_REPO_MAP
* system / environment / tool / token / asset / webhook_subscription /
* quota / notification_channel / secret_rotation_policy / access_rule / test_case
*
* 统一响应结构{success: true, data: {...}}
*/
import { apiAdminGet, apiAdminPost, apiAdminDelete } from '../base'
import { buildUrl, buildQueryString, MODULE_PATHS } from './base'
const URL = buildUrl(MODULE_PATHS.RECYCLE_BIN)
/**
* 查询回收站列表
*
* @param {Object} params - 查询参数
* @param {string} [params.resource_type] - 资源类型不传时返回摘要传时返回明细
* @param {number} [params.limit=50] - 每页条数1-200
* @param {number} [params.offset=0] - 偏移量
* @param {string} [params.start_time] - 起始时间ISO8601 deleted_at 过滤
* @param {string} [params.end_time] - 结束时间ISO8601 deleted_at 过滤
* @returns {Promise<{success: boolean, data: {items: Array, total: number, limit: number, offset: number, by_type: Object}}>}
*/
export const getTrashListApi = (params = {}) =>
apiAdminGet(`${URL}${buildQueryString(params)}`)
/**
* 清理过期回收站物理删除超过保留期的软删除资源
*
* @param {Object} data - 请求体
* @param {number} data.older_than_days - 保留期天数1默认 30
* @returns {Promise<{success: boolean, data: {purged_count: number, by_type: Object, cutoff_at: string}}>}
*/
export const purgeTrashApi = (data) => apiAdminPost(`${URL}/purge`, data)
/**
* 恢复软删除资源
*
* @param {string} resourceType - 资源类型
* @param {number} resourceId - 资源 ID
* @returns {Promise<{success: boolean, data: {resource_type: string, resource_id: number, restored: boolean, restored_at: string}}>}
*/
export const restoreTrashApi = (resourceType, resourceId) =>
apiAdminPost(`${URL}/${resourceType}/${resourceId}/restore`)
/**
* 物理删除资源不可恢复
*
* @param {string} resourceType - 资源类型
* @param {number} resourceId - 资源 ID
* @returns {Promise<{success: boolean, data: {resource_type: string, resource_id: number, deleted: boolean}}>}
*/
export const hardDeleteTrashApi = (resourceType, resourceId) =>
apiAdminDelete(`${URL}/${resourceType}/${resourceId}`)